package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"path/filepath"
	"strings"
	"time" // 新增 time 包

	"github.com/tealeg/xlsx"
)

func main() {
	var xlFileName string
	for _, arg := range os.Args {
		if strings.HasPrefix(arg, "-p=") {
			value := strings.TrimPrefix(arg, "-p=")
			switch value {
			case "wg":
				xlFileName = "wg.xlsx"
			case "ns":
				xlFileName = "ns.xlsx"
			default:
				fmt.Println("请使用  urldown -p=< wg | ns >")
				return
			}
			break
		}
	}
	if xlFileName == "" {
		fmt.Println("请使用  urldown -p=< wg | ns >")
		return
	}

	var dirNameStr string

	if xlFileName == "wg.xlsx" {
		dirNameStr = "images-wg"
	} else if xlFileName == "ns.xlsx" {
		dirNameStr = "images-ns"
	}

	// 创建图片目录
	if err := os.MkdirAll(dirNameStr, os.ModePerm); err != nil {
		panic(err)
	}

	// 打开Excel文件
	xlFile, err := xlsx.OpenFile(xlFileName)
	if err != nil {
		panic(err)
	}

	// 遍历每一行（从第2行开始）
	for rowIndex, row := range xlFile.Sheets[0].Rows {
		if rowIndex == 0 { // 跳过标题行
			continue
		}

		// 获取各列值
		aCell := row.Cells[0].String() // A列
		bCell := row.Cells[1].String() // B列
		url := row.Cells[3].String()   // D列（索引3）

		// 处理B列的日期前缀（假设格式为YYYYMMDD-xxx）
		bParts := strings.SplitN(bCell, "/", 2)
		if len(bParts) > 1 {
			bCell = bParts[1]
		}

		// 生成文件名
		filename := fmt.Sprintf("%s,%s", aCell, bCell)
		filePath := filepath.Join("images", filename)

		fmt.Printf("正在下载: %s\n", filename) // 新增下载提示
		startTime := time.Now()            // 记录开始时间

		// 下载图片
		resp, err := http.Get(url)
		if err != nil {
			fmt.Printf("下载失败（行%d）: %v\n", rowIndex+1, err)
			continue
		}
		defer resp.Body.Close()

		// 创建文件
		outFile, err := os.Create(filePath)
		if err != nil {
			fmt.Printf("创建文件失败（行%d）: %v\n", rowIndex+1, err)
			continue
		}
		defer outFile.Close()

		// 保存文件
		written, err := io.Copy(outFile, resp.Body)
		if err != nil {
			fmt.Printf("保存失败（行%d）: %v\n", rowIndex+1, err)
		}

		// 新增统计信息
		duration := time.Since(startTime)
		fileSizeMB := float64(written) / (1024 * 1024)
		fmt.Printf("下载完成: %s (%.2fMB, 耗时%.2f秒)\n\n",
			filename,
			fileSizeMB,
			duration.Seconds())
	}
}
